home *** CD-ROM | disk | FTP | other *** search
/ C & C++ Multimedia Cyber Classroom / C and C++ Multimedia Cyber Classroom (Prentice Hall) (1998).iso / src / fig05_26.jar / Ch05 / Fig05_26 / Fig05_26.cpp next >
C/C++ Source or Header  |  1997-10-14  |  2KB  |  73 lines

  1. // Fig. 5.26: fig05_26.cpp
  2. // Multipurpose sorting program using function pointers
  3. #include <iostream.h>
  4. #include <iomanip.h>
  5.  
  6. void bubble( int [], const int, int (*)( int, int ) );
  7. int ascending( int, int );
  8. int descending( int, int );
  9.  
  10. int main()
  11. {
  12.    const int arraySize = 10;
  13.    int order, 
  14.        counter,
  15.        a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
  16.  
  17.    cout << "Enter 1 to sort in ascending order,\n" 
  18.         << "Enter 2 to sort in descending order: ";
  19.    cin >> order;
  20.    cout << "\nData items in original order\n";
  21.    
  22.    for ( counter = 0; counter < arraySize; counter++ )
  23.       cout << setw( 4 ) << a[ counter ];
  24.  
  25.    if ( order == 1 ) {
  26.       bubble( a, arraySize, ascending );
  27.       cout << "\nData items in ascending order\n";
  28.    }
  29.    else {
  30.       bubble( a, arraySize, descending );
  31.       cout << "\nData items in descending order\n";
  32.    }
  33.  
  34.    for ( counter = 0; counter < arraySize; counter++ )
  35.       cout << setw( 4 ) << a[ counter ];
  36.  
  37.    cout << endl;
  38.    return 0;
  39. }
  40.  
  41. void bubble( int work[], const int size, 
  42.              int (*compare)( int, int ) )
  43. {
  44.    void swap( int *, int * );
  45.  
  46.    for ( int pass = 1; pass < size; pass++ )
  47.  
  48.       for ( int count = 0; count < size - 1; count++ )
  49.  
  50.          if ( (*compare)( work[ count ], work[ count + 1 ] ) )
  51.             swap( &work[ count ], &work[ count + 1 ] );
  52. }
  53.  
  54. void swap( int *element1Ptr, int *element2Ptr )
  55. {
  56.    int temp;
  57.  
  58.    temp = *element1Ptr;
  59.    *element1Ptr = *element2Ptr;
  60.    *element2Ptr = temp;
  61. }
  62.  
  63. int ascending( int a, int b )
  64. {
  65.    return b < a;   // swap if b is less than a
  66. }
  67.  
  68. int descending( int a, int b )
  69. {
  70.    return b > a;   // swap if b is greater than a
  71. }
  72.  
  73.